package cn.wolfcode.service.impl;

import cn.wolfcode.domain.vo.InfoTemp;
import cn.wolfcode.service.IChatService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;

@Service
public class ChatServiceImpl implements IChatService {

    // 从 Spring 容器中获取我们放入的 AI 聊天客户端
    @Autowired
    private ChatClient chatClient;

    @Override
    public Flux<String> chat(InfoTemp infoTemp) {
        // 获取用户 id 用来让 AI 记忆具体与哪个用户的对话
        Long userId = infoTemp.getSender();
        // 通过 chatClient.prompt() 方法来构建请求对话构建器
        // .user 用户的问题
        Flux<String> result = chatClient.prompt().user(infoTemp.getContent())
                // 通过 advisors 配置对话记忆参数
                .advisors(
                        a -> a.param(
                                // 使用用户 ID 做记忆
                                AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY,userId.toString()
                                // 记忆做大 10条
                        ).param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY,10)
                        // 使用流式输出模式做响应。
                ).stream().content();
        return result;
    }
}